[t:/]$ 지식_

리눅스 기반 한 방 배포 패키지 제작을 위한 노트.

2002/09/10

아나콘다 시절에 끄적였던 노트.

1. 배경

현재 리코멘드 하고 있는 리눅스 배포본이 있지만 설정이 다양하고 불필요한 서비스와 어플리케이션들이 지원 활동에 장애요소가 되고 있다.

2. 추진

향후 외수용 제품으로 리눅스가 시발이 될 예정이며 이에 각국의 리눅스 배포본 상황과 관계없이 원클릭 인스톨이 가능해야 용이하다. 따라서 자체 리눅스 배포본을 구성하는 것이 유리하다.

3. 절차

기존 리눅스 배포본의 역공학 분석에서 출발한다.

3.1 리눅스 배포본 부팅 디스크 분석.

한컴이나 레드햇의 부팅디스크 이미지를 분석한다. 배포 CD 에는 /images/boot.img 로 존재한다. 이를 하드에 복사하여 하드의 특정 공간에 루프백 마운팅을 하면 부팅디스크의 실제 RFS(Root file system)이 보인다.

3.1.1 부팅 디스크 RFS 의 분석

여기에는 시동용 커널과 필요 메세지, 그리고 시동RFS인 initrd 이미지가 있다. 시동용 커널도 최초 스타트업 코드외에는 압축되어 있다고 여겨진다. initrd는 압축되어 있으므로 gz로 확장자를 바꾸어 압축을 해제한후 루프백 마운팅을 하면 내용물을 볼 수 있다.

3.1.2 initrd 의 분석

이것은 시동용 RFS 로서 부팅만을 위한 램디스크 RFS 이다. 여기에는 기존 배포본들이 설치에 필요한 상용 디바이스들의 드라이버를 거의 포함하고 있으므로 기존 배포본들의 구성을 적극 이용해야 한다. 설치에 필요한 디바이스라함은 주로 스카시나 레이드 컨트롤러등을 이야기한다.

3.1.3 initrd 및 시동 절차의 분석

시동 절차에 따른 각각의 엔트리 포인트를 찾아내야 한다.initrd 의 linuxrc 파일이 최초 엔트리 포인트라 여겨지며, 전통적인 부팅 디스크들은 이 파일이 스크립트였으므로 간략히 해결되었으나 최근 배포본들의 linuxrc 는 커스터마이즈 된 init에 바로 링크되어 있다. 알다시피 init는 커널로딩후 디바이스 드라이버를 적재하는 등의 초기화를 담당한다. 이 init 후에는 실제로 인스톨 될 하드의 마운팅이 완결되어 있다.

3.1.4 커스터마이즈 된 init 의 제작.

이 init 는 최소한의 초기화를 끝낸 후 실제 인스톨러에게 엔트리 포인트를 넘겨주는 역할을 하게 된다. 실제 소스를 확보하거나 기존의 init 소스에서 수정 가능하다.

3.2 실제 RFS의 구성

기존 배포본을 중심으로 삼아 무자비한(?) 가지치기를 감행한다.

3.2.1 디바이스 드라이버의 선별

최신/안정 디바이스 드라이버들을 선별하여 담는다.

3.2.2 커널 컴파일

최적의 커널 구성을 하여 컴파일 한다.

3.2.3 가지치기

대부분의 서비스는 제거될 것이다.

3.3 인스톨러 제작

init에서 엔트리 포인트를 넘겨받은 인스톨러 프로그램은 인스톨을 진행하면 된다. 전통적인 방식에서는 텍스트 방식이었으나 최근에는 아나콘다나 까르마를 이용한 프레임버퍼 응용 그래픽 인스톨을 제공한다. 아직 관련 자료가 미확보 되었다.

3.3.1 가장 손쉬운 인스톨러

가장 손쉬운 방법은 스크립트 또는 터미널 프로그램을 작성하는 것이다. 엔트리 포인트를 넘겨받은 스크립트는 파티셔닝 프로그램으로 점프시킨다. 사용자가 파티셔닝 하면 (가능하다면 오토 파티셔닝도) 파티션 프로그램이 종료된 후 다시 인스톨러로 돌아온다.

3.3.1.1 가장 손쉬운 인스톨러의 진행

가장 손쉬운 인스톨러는 CD-ROM에 압축되어 있는 RFS 통짜 파일을 각각의 파티션에 푸는 것으로 끝나버린다. 따로 RPM도 필요없다. /opt 를 압축한 파일을 /opt 파티션에 풀어버리면 끝이다.

3.3.2 진보된 인스톨러

역시 아나콘다를 사용하는 것이다. 까르마를 도입한 미지3.0의 경우를 볼 때 까르마는 아직 조잡하다.

3.3.2.1 아나콘다의 조사 (개발 경험자나 레퍼런스할 자료가 있으면 연락주세요)

조사 중이다. 파이썬으로 제작되었다. 관련 컨픽파일에 의해서 일괄 진행되는 듯 하다. 이미지와 설명 텍스트 파일, 그리고 설치 종류(웍스테이션이냐 서버냐..)와 그에 따른 RPM리스트 파일등. 여기서 RPM의 상관관계가 면밀히 조사되어야 한다. 기존 배포본을 참고한다.

4. 인스톨 종료

이렇게 설치된 어울림 리눅스(?)는 어플의 추가 설치가 필요없으며 엔지니어의 번거로운 부가 작업을 최소화 한 공장출하(?) 상태의 하드디스크를 구성하게 된다.

4.1 인스톨 후에 필요한 것.

리눅스 설치 중에 묻는 네트웍 설정이나 로케일/시간 설정 내용들은 어플 인스톨러에 이관하여 한 방에 해결한다. 아나콘다를 이용한 경우에는 중간에 그 과정이 포함되어 있으므로 한 방에는 어렵다. 이렇게 독자 인스톨러는 어플의 기본 설정까지 이어지는 것이다.

5. 독자 쉘의 운영?

엑스 윈도우를 구동하느냐 안 하느냐가 먼저 논의되어야 하겠다.

5.1 가장 효과적인 쉘 환경?

본인이 생각하는 가장 효과적은 쉘 환경은 도스 시절의 NC 나 리눅스의 MC 와 같은 콘솔 프로그램을 작성하는 것이다. 이는 편안한 UI를 제공함과 동시에 프로폐셔널한 관리자에게는 배치 스크립트 작업이나 고효율 왕타빨 관리를 가능하게 한다.

5.2 추가로 고려해야 할 것.

엑스 윈도우의 로컬 구동을 허용 할 것이냐? 물론 있으면 좋지만. 있을 경우 '단순화'와 개발 지원의 표준화에는 걸리적거리는 요소임에는 분명하다.

6. 추가로 면밀히 연구해야 할 것.

로케일 라이브러리 및 리눅스 계통에서의 로케일 관련 개발 환경 조사가 필요하다. 이는 외수용 제품에 대한 대응에 있어서 로케일 설정과 폰트의 추가만으로 세계 어느 나라든 즉각 대응할 수 있게 하는 요소가 된다. 해당 국가별 커스터마이즈 대응은 시간낭비가 될 것이다.

추가된 내용.

1. KickStart Mode 의 이용

백문이 불여일RUN 리눅스 KDE 에서 ksconfig 를 실행한다. 킥 스타트는 원클릭 리눅스 초기화로서 대기업 제품에 따라오는 "윈도 몽창 초기화 CD"와 흡사하다.

관련 문서는

http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/

..에도 있고 KLDP 에도 있다.

2. 아나콘다의 이용.

레드햇의 경우 CDROM의 /RedHat/base/ 밑에 hdlist, hdlist2, comps 파일에 설치에 관한 상세 데이터가 들어있고. *.img 파일로서 기업 로고등을 담고 있다. hdlist는 아나콘다가 깔려 있는 리눅스 머신에서 관련 유틸리티로 생성한다.

3. 부팅 영역의 커스터마이즈.

최초 아나콘다 구동시까지 벌어지는 init 바이너리 속의 텍스트들의 카피라이트 커스터마이즈가 필요하다. 귀찮고 급하다면, 당장 헥사에디터로 텍스트만 골라서 바꾸는 방법도.. ;;

4. 결론.

일단 자료 조사를 더 하고 실제 비슷한 부팅 가능 설치 씨디롬을 제작하지요.

5. 추가로 필요한 사항.

이 씨디를 제작하는 원클릭 스크립트 or 패키지 메니저의 제작이 병행되면 더욱 더 좋겠습니다.





공유하기













[t:/] is not "technology - root". dawnsea, rss